package models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.Table;
import javax.persistence.Transient;

import services.DAO;

@Entity
@IdClass(CalificacionCalendarioId.class)
@Table(name = "calificacion_calendario")
@NamedNativeQueries({ @NamedNativeQuery(name = CalificacionCalendario.MISSING_GRADES, query = "select distinct perprofe.nombres||' '||perprofe.apellidos,mater.nombre,c.nombre from curso c join matricula m on c.id=m.id_curso "
		+ "join materia_grado mg on c.id_grado=mg.id_Grado "
		+ "join materia mater on mater.id=mg.id_materia "
		+ "join materia_curso mc on mc.id_materia=mg.id_materia and mc.id_curso=c.id "
		+ "join profesor profe on profe.id=mc.id_profesor "
		+ "join persona perprofe on perprofe.id=profe.id_persona "
		+ "left join calificacion_calendario cp "
		+ "on cp.id_materia=mg.id_materia and cp.id_grado=mg.id_grado and cp.id_estudiante=m.id_Estudiante and cc.id_calendario_academico=?idCalendarioAcademico "
		+ "where cp.nota is null") })
public class CalificacionCalendario extends models.Entity<CalificacionCalendarioId> {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final String MISSING_GRADES = "missingGrades";
	@Id
	@Column(name = "id_estudiante")
	private Long idEstudiante;
	@Id
	@Column(name = "id_calendario_academico")
	private Long idCalendarioAcademico;
	@Id
	@Column(name = "id_materia")
	private Long idMateria;
	@Id
	@Column(name = "id_grado")
	private Long idGrado;

	private String nota;
	@Transient
	private Estudiante estudiante;

	public CalificacionCalendario() {
	}

	public CalificacionCalendario(Long idEstudiante, Long idCalendarioAcademico,
			Long idMateria, Long idGrado, String nota) {

		this.idEstudiante = idEstudiante;
		this.idCalendarioAcademico = idCalendarioAcademico;
		this.idMateria = idMateria;
		this.idGrado = idGrado;
		this.nota = nota;
	}

	public Long getIdEstudiante() {
		return idEstudiante;
	}

	public void setIdEstudiante(Long idEstudiante) {
		this.idEstudiante = idEstudiante;
	}

	public Long getIdCalendario() {
		return idCalendarioAcademico;
	}

	public void setIdCalendario(Long idCalendario) {
		this.idCalendarioAcademico = idCalendario;
	}

	public Long getIdMateria() {
		return idMateria;
	}

	public void setIdMateria(Long idMateria) {
		this.idMateria = idMateria;
	}

	public Long getIdGrado() {
		return idGrado;
	}

	public void setIdGrado(Long idGrado) {
		this.idGrado = idGrado;
	}

	@Override
	public CalificacionCalendarioId getId() {

		return new CalificacionCalendarioId(idEstudiante, idCalendarioAcademico,
				idMateria, idGrado);
	}

	@Override
	public void setId(CalificacionCalendarioId id) {
		idEstudiante = id.getIdEstudiante();
		idCalendarioAcademico = id.getIdCalendarioAcademico();
		idMateria = id.getIdMateria();
		idGrado = id.getIdGrado();
	}

	public Estudiante getEstudiante() {
		if (estudiante == null)
			estudiante = DAO.find(Estudiante.class, idEstudiante);
		return estudiante;

	}

	public String getNota() {
		return nota;
	}

	public void setNota(String nota) {
		this.nota = nota;
	}

	public void setEstudiante(Estudiante e) {
		estudiante = e;

	}

}
